package objects

import (
	"io"
	"log"
	"net/http"
	"os"
	"strings"
)
//Go 语法学习:变量或函数名首字母小写，仅在包内使用，如put 小写仅在objects包内可见

/* 
	put函数负责处理HTTP的PUT 请求，将PUT上来的对象存储在本地磁盘上
	1.首先获取URL中的<object_name>,注意strings.Split(r.URL.EscapedPath(), "/")[2])获取到<object_name>
	2.然后调用os.Create在本地文件系统创建$STORAGE_ROOT/objects/<object_name> 文件f，创建失败返回500；成功则将r.Body写入f

*/
func put(w http.ResponseWriter, r *http.Request) {
	f, e := os.Create(os.Getenv("STORAGE_ROOT") + "/objects/" +
		strings.Split(r.URL.EscapedPath(), "/")[2])
	if e != nil {
		log.Println(e)
		w.WriteHeader(http.StatusInternalServerError)
		return
	}
	defer f.Close()
	io.Copy(f, r.Body)// io.copy方法的2个参数，f是io.Writer, r.Body是io.Reader
}
